template<class T> 
class Link_t{
public:
	Link_t();
	Link_t(T* data);
	Link_t* getNext();
	Link_t* getPrev();
	T* getData();
	void setNext(Link_t* next);
	void setPrev(Link_t* prev);
private:
	Link_t(const Link_t& a); // private copy constructor
	Link_t& operator=(const Link_t& a); // private operator=
	T* data;
	Link_t* next;
	Link_t* prev;
};

template<class T> 
Link_t<T>::Link_t(): next(0), prev(0){}

template<class T> 
Link_t<T>::Link_t(T* data):data(data), next(0), prev(0){}

template<class T> 
Link_t<T>* Link_t<T>::getNext(){
	return this->next;
}

template<class T> 
Link_t<T>* Link_t<T>::getPrev(){
	return this->prev;
}

template<class T> 
T* Link_t<T>::getData(){
	return this->data;
}

template<class T> 
void Link_t<T>::setNext(Link_t* next){
	this->next = next;
}

template<class T> 
void Link_t<T>::setPrev(Link_t* prev){
	this->prev = prev;
}
